<?php
/*
 * Copyright (c) 2008 Kilian Marjew <kilian@marjew.nl>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *
 * @author Kilian Marjew (kilian@marjew.nl)
 * @url http://genusapis.marjew.nl/
 */

class GenusApisBatch {
    protected $oOAuthToken;
    protected $sParams;
    protected $oGenusApis;
    protected $apiCalls = array();

    public function __construct($oOAuthToken, $sParams, $oGenusApis) {
        $this->oOAuthToken = $oOAuthToken;
        $this->sParams = $sParams;
        $this->oGenusApis = $oGenusApis;
    }

    public function add($ha_method, $sParams) {
        $sDefaultParams = array(
                            "ha_method" => $ha_method,
                            "ha_version" => $this->oGenusApis->ha_version,
                            "ha_format" => GenusApis::DEFAULT_HA_FORMAT,
                            "ha_fancylayout" => GenusApis::DEFAULT_HA_FANCYLAYOUT
                        );
        $sParams = $sParams + $sDefaultParams;
        $index = sizeof($this->apiCalls);
        $this->apiCalls[$index] = $sParams;
        return $index;
    }

    public function execute() {
        if (sizeof($this->apiCalls) > 0) {
            $aRequest = array();
            foreach ($this->apiCalls as $apiCall) {
                $aRequest[] = OAuthUtil::normalizeKeyValueParameters($apiCall);
            }
            $this->sParams['request'] = implode(',', $aRequest);
            return $this->oGenusApis->doMethod('batch.process', $this->sParams, $this->oOAuthToken);
        }
    }
}
?>
